/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package sie_invdis;

import com.griaule.grfingerjava.FingerprintImage;
import com.griaule.grfingerjava.IFingerEventListener;
import com.griaule.grfingerjava.IImageEventListener;
import com.griaule.grfingerjava.IStatusEventListener;
import com.griaule.grfingerjava.GrFingerJava;
import com.griaule.grfingerjava.GrFingerJavaException;
import java.io.File;
import com.griaule.grfingerjava.MatchingContext;
import com.griaule.grfingerjava.Template;
//import si_rhchecador_huella.supervision_rh_asistencia_checador;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import java.sql.ResultSet;
import java.io.InputStream;
/**
 *
 * @author michelle
 */
public class supervision_rh_edita_hUtil implements IStatusEventListener, IImageEventListener, IFingerEventListener{
    bd_conexion x = new bd_conexion();
    ResultSet rs = null;

    int recorri=0;
 /**
* @atributos
* @author: Ricardo Rosero
* @access: public y private
*/
/**Contexto utilizado para la captura, extracción y coincidencia de huellas digitales */
private MatchingContext fingerprintSDK;
/**Interfaz de usuario donde se muestra la imagena de la huella*/
private supervision_rh_edita_huella ui;
/** Indica si la plantilla o template debe ser extraída automáticamente*/
private boolean autoExtract = true;
/** Arreglo que contiene localmente los datos de las huellas capturadas */
private ByteArrayInputStream fingerprintData, fingerprintData2;
/**Arreglo que contiene la longitud del dato de la huella*/
private int fingerprintDataLength, fingerprintDataLenght2;
/** La imagen de la última huella digital capturada. */
private FingerprintImage fingerprint, fingerprint2;
/** La plantilla de la última imagen de huella capturada */
public com.griaule.grfingerjava.Template template, template2;


public supervision_rh_edita_hUtil(supervision_rh_edita_huella ui) {
this.ui = ui;
//Inicializa la conexión a la BD.
//x.estableceConexion();
//inicializar_huella();

}

/**
* @function: inicializarCaptura
* @author: Ricardo Rosero
* @access: public
* @return:
*/
public void inicializarCaptura()
    {
    try
        {
        fingerprintSDK = new MatchingContext();
        //Inicializa la captura de huella digital.
        GrFingerJava.initializeCapture(this);
        }
    catch (Exception e)
        {
            //Si ocurre un error durante la inicialización se indica con un mensaje y se cierra la aplicación.
            e.printStackTrace();
        System.exit(1);
        }
    }

/**
* @function: setFingerprintSDKNativeDirectory
* @author: Ricardo Rosero
* @access: public
* @return
*/
public static void setFingerprintSDKNativeDirectory(String directorio)
{
        File directory = new File(directorio);
        try
            {
            GrFingerJava.setNativeLibrariesDirectory(directory);
            GrFingerJava.setLicenseDirectory(directory);
            }
        catch (GrFingerJavaException e)
            {
                e.printStackTrace();
            }
}

/**
* @function: onSensorPlug
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onSensorPlug(String idSensor)
{
    try
        {
            //Comienza la captura con el lector conectado.
            GrFingerJava.startCapture(idSensor, this, this);
        }
    catch (GrFingerJavaException e)
        {
        //Indica si ha ocurrido un error con el lector.
        e.printStackTrace();
        }
}


/**
* @function: onSensorUnPlug
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onSensorUnplug(String idSensor)
{
    try
        {
            GrFingerJava.stopCapture(idSensor);
        }
    catch (GrFingerJavaException e)
        {
            //Indica si ha ocurrido un error con el lector.
            e.printStackTrace();
        }
}

/**
* @function: onImageAcquired
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onImageAcquired(String idSensor, FingerprintImage huellaDigital)
{
        //Almacena la imagen de la huella

        this.fingerprint=huellaDigital;
        //Muestra la imagen obtenida
        ui.showImage(huellaDigital);
        //Muestra la plantilla en la imagen actual
        extract();
       
}

/**
* @function: extrac
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void extract()
{
    try
        {
        System.out.println("extrañendo...........");
        //Extracts a template from the current fingerprint image.
        template = fingerprintSDK.extract(fingerprint);
        //display minutiae/segments/directions into image
        ui.showImage(GrFingerJava.getBiometricImage(template,fingerprint));
        }
    catch (GrFingerJavaException e)
        {
        e.printStackTrace();
        }
}


/**
* @function: guardar
* @author: Ricardo Rosero
* @access: public
* @return
* @throws: GrFingerJavaException
*/
public void guardar(String empleado) throws GrFingerJavaException, SQLException{
    fingerprintData = new ByteArrayInputStream(template.getData());
    int tamano=template.getData().length;


    String texto="select * from x1_supervision_empleados_asistencia_huellas(1,'','','','') as (ide integer,hp bytea,hi bytea);",id="";
    boolean coinciden=false;
    try{
            //Obtiene todas las huellas de la bd
            rs = x.sieuno_executediversosv2(texto, variables_global.getconexiongral());
            //Si se encuentra el nombre en la base de datos
            //rs.first();
            while(rs.next())
                {

                    byte templateBuffer[] = rs.getBytes("hi");
                    Template referenceTemplate = new Template(templateBuffer);
                    if((referenceTemplate!=null) && (coinciden==false))
                        {
                            id=rs.getString("ide");
                            //Lee la plantilla de la base de datos
                            coinciden = fingerprintSDK.verify(template,referenceTemplate);
                            //System.out.println("buscando huella"+coinciden);
                            //Si encuentra correspondencia dibuja el mapa e indica el nombre de la persona que coincidió.
                        }
                    recorri=1;
                }

        }
        catch(Exception e)
            {
            System.out.println(e.getMessage());
            }
        if (coinciden==false)
            {
                Connection c=variables_global.getconexiongral();
                PreparedStatement guardarStmt = c.prepareStatement("INSERT INTO x1distribucion.supervision_empleados_huelladig(id_empleado, huella_indice) values(?,?)");
                guardarStmt.setInt(1,Integer.valueOf(empleado));
                guardarStmt.setBinaryStream(2, fingerprintData,tamano);
                //Ejecuta la sentencia
                guardarStmt.execute();

                int encontrado=0;
                texto="select * from x1_supervision_empleados_catalogo(17,'"+empleado+"','','','') as (id integer);";
                System.out.println(texto);
                try
                    {
                        rs = x.sieuno_executediversosv2(texto,variables_global.getconexiongral());
                            while (rs.next())
                                {
                                    encontrado=1;
                                }
                    }
                    catch(Exception e)
                        {
                            System.out.println(e.getMessage());
                        }
                if (encontrado==1)
                    {
                   
                    JOptionPane.showMessageDialog(null,"<html><h2><b>Huella Creada Correctamente, el Programa se Cerrara, abra su checador y verifique su huella</b></h2></html>", "Sistema Integral Tareas",1);
                    //ui.dispose();
                    x.cierraConexionv2(variables_global.getconexiongral());   // TODO add your handling code here:
                    System.exit(0);// para cerrar la aplicacion
                     System.out.println("impresion para ver si pasa aki");
                    }
            }
        else
             {
                    System.out.println("impresion");
                    JOptionPane.showMessageDialog(null,"<html><h2><b>Huella ya Existe por favor verifique!!</b></h2></html>", "Sistema Integral Tareas",1);
             }
}


/**
* @function: onFingerDown
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onFingerDown(String idSensor) {
    //ui.esperastop();
    //ui.procesando();
}


/**
* @function: onFingerUp
* @author: Ricardo Rosero
* @access: public
* @return
*/
public void onFingerUp(String arg0) {
//ui.espera();
//ui.procesandostop();
}


}
